/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef WIN_VOLUME_INDEX_H
#define WIN_VOLUME_INDEX_H

#include "VolumeIndex.h"
#include "WinVolumeLivemount.h"
#include "ApplicationServiceDataType.h"

namespace FilePlugin {
class WinVolumeIndex : public VolumeIndex {
public:
    void ProcessVolumeScan() override;
    void FillScanConfigForScan() override;
    void ProcessDstPathForInd(std::string& dstPath) const;
    void WinCleanIndexMounts();

    bool CopyPreMetaFileToWorkDir() const override;
    bool MountVolumes() override;
    bool CheckTargetIsValidForInd(const std::string& dstPath);
    bool PrepareBasicDirectory() override;
    bool MountSingleVolumeForInd(const WinVolumeInfo& volume, const std::string& dstPath);
    bool SetupCopiesRepo();
    bool VolumeScan();
    
    std::vector<WinVolumeInfo> GetVolumesFromCopyForInd();
    std::string GetWinSystemDriveForInd();
private:
    std::vector<VolumeIndexDetail> m_indexDetails;
    std::string m_volMetaPath;
    std::string m_cloneCopyId;
    std::string m_defaultMountPrefix;
};
}

#endif
